
fun main(args: Array<String>) {
    printLength("123456789");
    printLength(34567)
    printLength(listOf(Any()))
}


/**
 * 第一种
 */
//fun printLength(obj: Any){
//    println("'$obj' String length is ${getStringLength(obj)?:"... err, not a string"}")
//}
//
//fun getStringLength(obj: Any): Int? {
//    if (obj is String) {
//        //'obj'在条件分支内自动转换成'String'
//        return obj.length
//    }
//    //在离开类型检测分支后，'obj'仍然是'Any'类型
//    return null
//}

/**
 * 第二种
 */
//fun printLength(obj: Any) {
//    println("'$obj' string length is ${getStringLength(obj) ?: "... err, not a string"}")
//}
//
//fun getStringLength(obj: Any): Int? {
//    if (obj !is String) return null
//    // `obj` 在这一分支自动转换为 `String`
//    return obj.length
//}

/**
 * 第三种
 */
fun getStringLength(obj: Any): Int? {
    // `obj` 在 `&&` 右边自动转换成 `String` 类型
    if (obj is String && obj.length > 0) {
        return obj.length
    }
    return null;
}

fun printLength(obj: Any) {
    println("'$obj' string length is ${getStringLength(obj) ?: "... eer，is empty or not a string at all"}")
}
